package grupobbva.pe.operhc.webservice.soap;

import static grupobbva.pe.operhc.util.Constant.MESSAGES_ERR_KEY;
import grupobbva.pe.operhc.action.ConsultaActualAction;
import grupobbva.pe.operhc.domain.Cliente;
import grupobbva.pe.operhc.domain.Contrato;
import grupobbva.pe.operhc.domain.SegUsuario;
import grupobbva.pe.operhc.domain.Segmento;
import grupobbva.pe.operhc.service.CuadroMandoService;
import grupobbva.pe.operhc.service.CuadroMandoServiceImpl;
import grupobbva.pe.operhc.service.ParametroService;
import grupobbva.pe.operhc.service.ParametroServiceImpl;
import grupobbva.pe.operhc.util.GenericObject;
import grupobbva.pe.operhc.util.PS9Builder;




import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

public class ProductosServices {

	/*private CuadroMandoService cuadroMandoService;
	private ParametroService parametrosService;
	private ConsultaActualAction consultaAction;
	private static Logger logger = Logger.getLogger(ConsultaActualAction.class);
	
	HttpServletRequest request;
	
	public SubProducto[] getProductos(
			String tipDocCliente,
			String numDocCliente,
			String codRegistro 
			) {
		
		inicializarInstancias();
		Map<String, Object> mapResult = new HashMap<String, Object>();
		Cliente cliente = null;
		try {
			cliente = this.getCliente(codRegistro, tipDocCliente, numDocCliente, "",request);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		SegUsuario usuarioSession = new SegUsuario();
		usuarioSession.setCodigo(codRegistro);
		
		List<Contrato> listContrato = consultaAction.getListContratos(cliente, usuarioSession);
		List<Contrato> listSolicitudesOfertas = consultaAction.getListSolicitudesOfertas(cliente, usuarioSession);
		listContrato.addAll(listSolicitudesOfertas);
		
		
		mapResult = parametrosService.getAllStructureProducts(cliente, listContrato, null, new HashMap<String, String>() );
		List<List<grupobbva.pe.operhc.domain.SubProducto>> lstSubProd = (List<List<grupobbva.pe.operhc.domain.SubProducto>>) mapResult.get("listGeneral");
		List<SubProducto> lstResultMime = new ArrayList<SubProducto>();
		for (List<grupobbva.pe.operhc.domain.SubProducto> listSubProd : lstSubProd) {
			List<SubProducto> lstSubProdMime = new ArrayList<SubProducto>();
			for (grupobbva.pe.operhc.domain.SubProducto subProducto : listSubProd) {
				SubProducto subProdMime = new SubProducto();
				try {
					BeanUtils.copyProperties(subProdMime, subProducto);
//					SubProducto subProdMime2 = new SubProducto();
//					subProdMime2.setDesSubProducto("TEST DE PRUEBA.....");
//					List<SubProducto> lstTmp = new ArrayList<SubProducto>();
//					lstTmp.add(subProdMime2);
//					subProdMime.setLstSubProducto(lstTmp);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
				lstSubProdMime.add(subProdMime);
				lstResultMime.add(subProdMime);
			}
			//lstResultMime.add(lstSubProdMime);
		}
		
		
		return lstResultMime.toArray(new SubProducto[0]);
	}

	private Cliente getCliente(String codRegistro, String tipDocCliente,
			String numDocCliente, String codCentral, HttpServletRequest request) throws Exception {
		Cliente cliente = new Cliente();
		Map<String, Object> mapResult = new HashMap<String, Object>();
		HttpSession session = request.getSession();
		session.setAttribute("listSegmentos", this.getSegmentosHost(codRegistro));
		
		mapResult = cuadroMandoService.consultarCliente(codRegistro, tipDocCliente, numDocCliente, codCentral,request);
		String messageError = (String) mapResult.get(MESSAGES_ERR_KEY);
		if(StringUtils.isBlank(messageError)) {
			if(mapResult.get("cliente") != null) {
				cliente = (Cliente) mapResult.get("cliente");
			}else{
				//TODO: Pendiente - Controlar Error.
				logger.error("NO EXISTE CLIENTE");
			}
		}
		return cliente;
	}

	private Object getSegmentosHost(String codRegistro) {
		
		List<Segmento> listaSegmentosHOST = new ArrayList<Segmento>();
		try {
			listaSegmentosHOST=PS9Builder.obtenerSegmentos(codRegistro);
		} catch (Exception e2) {
			logger.error(GenericObject.formatException(e2));
			listaSegmentosHOST = new ArrayList<Segmento>();
		}
		return listaSegmentosHOST;
		
	}

	private void inicializarInstancias() {

		cuadroMandoService = new CuadroMandoServiceImpl();
		parametrosService = new ParametroServiceImpl();
		consultaAction = new ConsultaActualAction();
		MessageContext context = MessageContext.getCurrentContext(); 
		HttpServletRequest req = (HttpServletRequest)
	            context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
		request = req;
	}
	*/
}
